μΉμ¬μ΄νΈμ μ ν리μΌμ΄μ μ μν μ κ·Όμ± λμ μ¬λΌμ΄λ 컨νΈλ‘€ μ μμ λΉκ²°μ μμ보μΈμ. λ²μ μ λ ₯ μ κ·Όμ± μꡬμ¬νμ λν μ¬μΈ΅ κ°μ΄λλ‘ ν¬μ©μ±μ 보μ₯νκ³ μ¬μ©μ κ²½νμ ν₯μμν€μΈμ.
μ¬λΌμ΄λ 컨νΈλ‘€: μ κ·Όμ± λμ λ²μ μ λ ₯μ λν μ’ ν© κ°μ΄λ
λ²μ μ λ ₯(range input)μ΄λΌκ³ λ μλ €μ§ μ¬λΌμ΄λ 컨νΈλ‘€μ μ°μμ μΈ λ²μμμ κ°μ μ ννλ λ° μ¬μ©λλ μΌλ°μ μΈ μ¬μ©μ μΈν°νμ΄μ€(UI) μμμ λλ€. λ³Όλ₯¨ μ‘°μ λ° κ°κ²© νν°λΆν° λ°μ΄ν° μκ°ν λꡬμ μ΄λ₯΄κΈ°κΉμ§ μΉμ¬μ΄νΈμ μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ μ΄λμλ μ‘΄μ¬ν©λλ€. νμ§λ§ μκ°μ μΌλ‘ λ§€λ ₯μ μ΄κ³ κΈ°λ₯μ μΌλ‘ 보μ΄λ μ¬λΌμ΄λλΌλ μ κ·Όμ±μ μ°μ μνμ§ μμΌλ©΄ μ₯μ κ° μλ μ¬μ©μμκ²λ μ₯λ²½μ΄ λ μ μμ΅λλ€. μ΄ κ°μ΄λλ μ¬λΌμ΄λ 컨νΈλ‘€μ μ κ·Όμ± μꡬμ¬νμ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡νμ¬, λͺ¨λ μ¬λμ΄ μμ μ λ₯λ ₯μ΄λ μ¬μ©νλ 보쑰 κΈ°μ μ κ΄κ³μμ΄ λ²μ μ λ ₯μ ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μλλ‘ λ³΄μ₯ν©λλ€.
μ κ·Όμ± λμ μ¬λΌμ΄λμ μ€μμ± μ΄ν΄νκΈ°
μ κ·Όμ±μ λ¨μν κ·μ μ€μ 체ν¬λ¦¬μ€νΈκ° μλλΌ μ’μ μΉ λμμΈκ³Ό κ°λ°μ κΈ°λ³Έ μΈ‘λ©΄μ λλ€. μ κ·Όμ± λμ μ¬λΌμ΄λ 컨νΈλ‘€μ μκ° μ₯μ , μ΄λ μ₯μ , μΈμ§ μ₯μ λ° κΈ°ν μ μ½μ΄ μλ μ¬μ©μκ° λͺ¨λ μλ―Έ μκ³ ν¨μ¨μ μΈ λ°©μμΌλ‘ μμμ μνΈ μμ©ν μ μλλ‘ λ³΄μ₯ν©λλ€. μ κ·Όμ± κ³ λ € μ¬νμ 무μνλ©΄ μ μ¬ κ³ κ°μ μλΉ λΆλΆμ λ°°μ νκ² λμ΄ λΆμ μ μΈ λΈλλ μΈμμ μ΄λνκ³ , μ λ½ μ κ·Όμ±λ²(EAA)μ΄λ λ―Έκ΅μ λ―Έκ΅ μ₯μ μΈλ²(ADA)κ³Ό κ°μ΄ κ°λ ₯ν μ κ·Όμ± λ²λ₯ μ΄ μλ μ§μμμλ λ²μ λ¬Έμ λ‘κΉμ§ μ΄μ΄μ§ μ μμ΅λλ€. κΈλ‘λ² κ΄μ μμ λ³Ό λ, μ κ·Όμ±μ μ°μ μνλ κ²μ λλ¬ λ²μλ₯Ό λνκ³ ν¬μ©μ±μ λν μ½μμ 보μ¬μ£Όμ΄ λ λμ μ¬μ©μ κΈ°λ°κ³Ό 곡κ°λλ₯Ό νμ±ν©λλ€.
μ¬λΌμ΄λ 컨νΈλ‘€μ ν΅μ¬ μ κ·Όμ± μꡬμ¬ν
μ κ·Όμ± λμ μ¬λΌμ΄λ 컨νΈλ‘€μ λ§λ€κΈ° μν΄ ν΄κ²°ν΄μΌ ν λͺ κ°μ§ ν΅μ¬ μμμ΄ μμ΅λλ€. μ¬κΈ°μλ μλ§¨ν± HTML, ARIA μμ±, ν€λ³΄λ νμ, ν¬μ»€μ€ κ΄λ¦¬, μμ λλΉ λ° λͺ νν μκ°μ μ νΈκ° ν¬ν¨λ©λλ€. κ°κ°μ λν΄ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€:
1. μλ§¨ν± HTML: <input type="range"> μμ μ¬μ©νκΈ°
μ κ·Όμ± λμ μ¬λΌμ΄λμ κΈ°λ°μ μλ§¨ν± HTML μμμΈ <input type="range">
λ₯Ό μ¬μ©νλ λ° μμ΅λλ€. μ΄ μμλ μ¬λΌμ΄λ 컨νΈλ‘€μ κΈ°λ³Έ ꡬ쑰λ₯Ό μ 곡νλ©°, <div>
μμμ JavaScriptλ₯Ό μ¬μ©νμ¬ μ²μλΆν° μ¬μ©μ μ§μ μ¬λΌμ΄λλ₯Ό λ§λλ κ²μ λΉν΄ λ΄μ¬μ μΈ μ κ·Όμ± μ΄μ μ μ 곡ν©λλ€. <input type="range">
μμλ λΈλΌμ°μ μ 보쑰 κΈ°μ μ΄ ν΄λΉ μμλ₯Ό μ¬λΌμ΄λ 컨νΈλ‘€λ‘ μΈμνκ² νκ³ κΈ°λ³Έ μμ€μ ν€λ³΄λ μ κ·Όμ±μ μ 곡ν©λλ€.
μμ:
<input type="range" id="volume" name="volume" min="0" max="100" value="50">
μ΄ μ½λ μ€λν«μ μ΅μκ° 0, μ΅λκ° 100, μ΄κΈ°κ° 50μ κ°λ κΈ°λ³Έ λ³Όλ₯¨ μ‘°μ μ© μ¬λΌμ΄λλ₯Ό μμ±ν©λλ€. μ΄λ¬ν μλ§¨ν± κ΅¬μ‘°λ μ κ·Όμ±μ μν μ€μν μΆλ°μ μ μ 곡ν©λλ€.
2. ARIA μμ±: μλ§¨ν± μλ―Έ κ°ννκΈ°
<input type="range">
μμκ° μλ§¨ν± κΈ°λ°μ μ 곡νμ§λ§, ARIA(Accessible Rich Internet Applications) μμ±μ μ¬λΌμ΄λμ λͺ©μ , μν λ° νμ΄μ§μ λ€λ₯Έ μμμμ κ΄κ³μ λν λ μμΈν μ 보λ₯Ό 보쑰 κΈ°μ μ μ 곡νλ λ° νμμ μ
λλ€. ARIA μμ±μ μ¬λΌμ΄λμ μκ°μ λͺ¨μμ΄λ κΈ°λ₯μ μν₯μ λ―ΈμΉμ§ μμΌλ©°, μμνκ² μ€ν¬λ¦° 리λμ κ°μ 보쑰 κΈ°μ μ μ 보λ₯Ό μ λ¬νκΈ° μν κ²μ
λλ€.
μ¬λΌμ΄λ 컨νΈλ‘€μ μν μ£Όμ ARIA μμ±:
aria-label
: μ¬λΌμ΄λμ λν κ°κ²°νκ³ μ¬λμ΄ μ½μ μ μλ λ μ΄λΈμ μ 곡ν©λλ€. λμ 보μ΄λ λ μ΄λΈμ΄ μμ λ μ¬μ©ν©λλ€. μ:aria-label="λ³Όλ₯¨ μ‘°μ "
aria-labelledby
: μ¬λΌμ΄λμ λν κ°μμ μΈ λ μ΄λΈμ μ 곡νλ μμμ IDλ₯Ό μ°Έμ‘°ν©λλ€. κ°μμ μΈ λ μ΄λΈμ΄ μμ λ μ νΈλλ λ°©λ²μ λλ€. μ:<label id="volume-label" for="volume">λ³Όλ₯¨</label>
μ΄ μμ λaria-labelledby="volume-label"
aria-valuemin
: μ¬λΌμ΄λμ νμ©λλ μ΅μκ°μ μ§μ ν©λλ€. μ΄λ<input type="range">
μμμmin
μμ±κ³Ό λμΌν μν μ ν©λλ€.aria-valuemax
: μ¬λΌμ΄λμ νμ©λλ μ΅λκ°μ μ§μ ν©λλ€. μ΄λ<input type="range">
μμμmax
μμ±κ³Ό λμΌν μν μ ν©λλ€.aria-valuenow
: μ¬λΌμ΄λμ νμ¬ κ°μ λνλ λλ€. μ΄λ<input type="range">
μμμvalue
μμ±κ³Ό λμΌν μν μ νλ©° μ¬λΌμ΄λ κ°μ΄ λ³κ²½λ λ λμ μΌλ‘ μ λ°μ΄νΈλμ΄μΌ ν©λλ€.aria-valuetext
: νμ¬ κ°μ λν΄ μ¬λμ΄ μ½μ μ μλ ννμ μ 곡ν©λλ€. μ΄λ κ°μ΄ λ μ§, μκ° λλ ν΅νμ κ°μ΄ λ¨μν μ«μκ° μλ λ νΉν μ€μν©λλ€. μ: κ°κ²© νν°μ κ²½μ°aria-valuetext="500λ¬λ¬"
aria-orientation
: μ¬λΌμ΄λμ λ°©ν₯(μν λλ μμ§)μ λνλ λλ€. μμ§ μ¬λΌμ΄λμλaria-orientation="vertical"
μ μ¬μ©ν©λλ€. κΈ°λ³Έκ°μ μνμ λλ€.aria-describedby
: μ¬λΌμ΄λμ λͺ©μ μ΄λ μ¬μ© μ§μΉ¨μ λν λ μμΈν μ€λͺ μ μ 곡νλ μμμ IDλ₯Ό μ°Έμ‘°ν©λλ€. μλ₯Ό λ€μ΄, νΉμ κ°μ μ€μ ν λμ κ²°κ³Όλ₯Ό μ€λͺ νλ ν μ€νΈλ₯Ό κ°λ¦¬ν¬ μ μμ΅λλ€.
ARIA μμ±μ μ¬μ©ν μμ:
<label id="price-label" for="price-range">κ°κ²© λ²μ:</label>
<input type="range" id="price-range" name="price-range" min="0" max="1000" value="500" aria-labelledby="price-label" aria-valuemin="0" aria-valuemax="1000" aria-valuenow="500" aria-valuetext="$500 USD">
μ΄ μμλ aria-labelledby
λ₯Ό μ¬μ©νμ¬ μ¬λΌμ΄λλ₯Ό κ°μμ μΈ λ μ΄λΈκ³Ό μ°κ²°νκ³ , aria-valuetext
λ₯Ό μ 곡νμ¬ νμ¬ κ°κ²©μ μ¬μ©μ μΉνμ μΈ νμμΌλ‘ μ λ¬ν©λλ€. "USD"λ₯Ό μ¬μ©ν μ μ μ μνμΈμ - κ΅μ μ¬μ©μλ₯Ό μν΄ μ μ ν ν΅ν κΈ°νΈλ₯Ό μ¬μ©νλ κ²μ΄ μ€μν©λλ€. λμ ν΅ν μ νκΈ°λ₯Ό μ¬μ©νμ¬ `aria-valuetext`λ₯Ό κ·Έμ λ§κ² μ
λ°μ΄νΈν μλ μμ΅λλ€.
3. ν€λ³΄λ νμ: λ§μ°μ€ μμ΄ μ‘°μ κ°λ₯μ± λ³΄μ₯νκΈ°
ν€λ³΄λ νμμ μ΄λ μ₯μ κ° μκ±°λ ν€λ³΄λλ₯Ό μ¬μ©νμ¬ μΉμ¬μ΄νΈλ₯Ό νμνλ κ²μ μ νΈνλ μ¬μ©μμκ² λ§€μ° μ€μν©λλ€. μ¬λΌμ΄λ 컨νΈλ‘€μ ν€λ³΄λλ§μΌλ‘λ μλ²½νκ² μ‘°μν μ μμ΄μΌ ν©λλ€.
νμ ν€λ³΄λ μνΈμμ©:
- Tab ν€: μ¬μ©μκ° Tab ν€λ₯Ό λλ₯΄λ©΄ ν¬μ»€μ€κ° μ¬λΌμ΄λλ‘ μ΄λν΄μΌ ν©λλ€. ν¬μ»€μ€λ₯Ό λ°λ μμμ μμλ νμ΄μ§μ λ Όλ¦¬μ μμ(μΌλ°μ μΌλ‘ μ½κΈ° μμ)λ₯Ό λ°λΌμΌ ν©λλ€.
- νμ΄ν ν€ (μ’/μ° λλ μ/ν): μ’μ° νμ΄ν ν€(μν μ¬λΌμ΄λ) λλ μν νμ΄ν ν€(μμ§ μ¬λΌμ΄λ)λ μ¬λΌμ΄λ κ°μ μ μ ν μλ§νΌ μ¦κ°μν€κ±°λ κ°μμμΌμΌ ν©λλ€. μ¦κ°λμ μΌκ΄λκ³ μμΈ‘ κ°λ₯ν΄μΌ ν©λλ€.
- Home ν€: μ¬λΌμ΄λ κ°μ μ΅μκ°μΌλ‘ μ€μ ν΄μΌ ν©λλ€.
- End ν€: μ¬λΌμ΄λ κ°μ μ΅λκ°μΌλ‘ μ€μ ν΄μΌ ν©λλ€.
- Page Up/Page Down ν€: νμ΄ν ν€λ³΄λ€ λ ν° μ(μ: μ 체 λ²μμ 10%)λ§νΌ μ¬λΌμ΄λ κ°μ μ¦κ°μν€κ±°λ κ°μμμΌμΌ ν©λλ€.
<input type="range">
μμλ μΌλ°μ μΌλ‘ κΈ°λ³Έ ν€λ³΄λ νμμ μ 곡νμ§λ§, νΉν μ¬μ©μ μ§μ μ¬λΌμ΄λμ κ²½μ° κΈ°λ₯ κ°νκ° νμν μ μμ΅λλ€. μ΄λ¬ν μνΈμμ©μ μ¬λ°λ₯΄κ² ꡬννκ³ aria-valuenow
λ° aria-valuetext
μμ±μ λμ μΌλ‘ μ
λ°μ΄νΈνλ €λ©΄ μ’
μ’
JavaScriptκ° νμν©λλ€. μ€ν¬λ¦½νΈκ° κ°μ΄ μ΅μκ° μλλ‘ λ΄λ €κ°κ±°λ μ΅λκ°μ μ΄κ³Όνλ κ²μ λ°©μ§νλ λ± μμΈμ μΈ κ²½μ°λ₯Ό μ²λ¦¬νλλ‘ ν΄μΌ ν©λλ€.
JavaScript μμ (μ€λͺ μ©):
```javascript const slider = document.getElementById('volume'); slider.addEventListener('keydown', (event) => { let currentValue = parseInt(slider.value); const step = 5; // μ¦κ° λ¨κ³ const minValue = parseInt(slider.min); const maxValue = parseInt(slider.max); switch (event.key) { case 'ArrowLeft': currentValue = Math.max(minValue, currentValue - step); break; case 'ArrowRight': currentValue = Math.min(maxValue, currentValue + step); break; case 'Home': currentValue = minValue; break; case 'End': currentValue = maxValue; break; // Page Up/Page Downλ μ μ¬νκ² μ²λ¦¬ default: return; // κ΄λ ¨ μλ ν€μ΄λ©΄ μ’ λ£ } slider.value = currentValue; slider.setAttribute('aria-valuenow', currentValue); slider.setAttribute('aria-valuetext', currentValue + '%'); // μμ: λ°±λΆμ¨ νμ event.preventDefault(); // λΈλΌμ°μ κΈ°λ³Έ λμ λ°©μ§ }); ```
μ΄ JavaScript μ½λ μ€λν«μ μ¬λΌμ΄λμ ν€λ³΄λ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ λ°©λ²μ λν κΈ°λ³Έ μμλ₯Ό μ 곡ν©λλ€. νΉμ μ¬λΌμ΄λμ μꡬμ¬νμ λ°λΌ λ¨κ³ ν¬κΈ°, μ΅μκ°, μ΅λκ° λ° `aria-valuetext`λ₯Ό μ‘°μ ν΄μΌ ν©λλ€. μ¬μ©μμ λ‘μΌμΌμ λ°λΌ μ¨λλ₯Ό μμ¨ λλ νμ¨λ‘ νμνλ κ²μ²λΌ μ μ ν λ¨μλ₯Ό μ¬μ©νλ κ²μ΄ μ€μν©λλ€. μ΄λ μ§λ¦¬μ μμΉ APIλ μ¬μ©μ μ€μ μ ν΅ν΄ λ¬μ±ν μ μμ΅λλ€.
4. ν¬μ»€μ€ κ΄λ¦¬: λͺ νν μκ°μ ν¬μ»€μ€ νμμ μ 곡νκΈ°
μ¬μ©μκ° ν€λ³΄λλ₯Ό μ¬μ©νμ¬ μ¬λΌμ΄λλ‘ μ΄λν λ, λͺ νν μκ°μ ν¬μ»€μ€ νμμκ° λνλμΌ ν©λλ€. μ΄ νμμλ μ¬μ©μκ° νμ¬ μ΄λ€ μμμ ν¬μ»€μ€κ° μλμ§ μ΄ν΄νλ λ° λμμ΄ λ©λλ€. λΈλΌμ°μ μμ μ 곡νλ κΈ°λ³Έ ν¬μ»€μ€ νμμλ νΉν μ¬λΌμ΄λκ° μ¬μ©μ μ§μ λͺ¨μμ κ°μ§ κ²½μ° νμ μΆ©λΆνμ§ μμ μ μμ΅λλ€.
ν¬μ»€μ€ νμμλ₯Ό μν λͺ¨λ² μ¬λ‘:
- CSSλ₯Ό μ¬μ©νμ¬ ν¬μ»€μ€ νμμ μ€νμΌ μ§μ νκΈ°: CSSμ
:focus
κ°μ ν΄λμ€λ₯Ό μ¬μ©νλ©΄ ν¬μ»€μ€ νμμ μ€νμΌμ μ§μ ν μ μμ΅λλ€. λ체 νμμλ₯Ό μ 곡νμ§ μκ³ κΈ°λ³Έ ν¬μ»€μ€ νμμλ₯Ό μ κ±°νλ κ²μ νΌν΄μΌ ν©λλ€. μ΄λ ν€λ³΄λ νμμ λ§€μ° μ΄λ ΅κ² λ§λ€ μ μμ΅λλ€. - μΆ©λΆν λλΉ λ³΄μ₯νκΈ°: ν¬μ»€μ€ νμμλ μ£Όλ³ λ°°κ²½κ³Ό μΆ©λΆν λλΉλ₯Ό κ°μ ΈμΌ ν©λλ€. WCAG(μΉ μ½ν μΈ μ κ·Όμ± κ°μ΄λλΌμΈ)λ ν¬μ»€μ€ νμμμ λν΄ μ΅μ 3:1μ λͺ μλΉλ₯Ό μꡬν©λλ€.
- ν¬κΈ°μ λͺ¨μ κ³ λ €νκΈ°: ν¬μ»€μ€ νμμλ λͺ ννκ² λ³΄μ΄κ³ μ¬λΌμ΄λμ λ€λ₯Έ μκ°μ μμμ ꡬλ³λ μ μμ΄μΌ ν©λλ€. ν λ리, μΈκ³½μ λλ λ°°κ²½μ λ³κ²½μ μ¬μ©νλ©΄ ν¬μ»€μ€κ° μλ μμλ₯Ό ν¨κ³Όμ μΌλ‘ κ°μ‘°ν μ μμ΅λλ€.
CSS μμ:
```css input[type="range"]:focus { outline: 2px solid #007bff; /* νλμ μΈκ³½μ */ outline-offset: 2px; /* μΈκ³½μ κ³Ό μ¬λΌμ΄λ μ¬μ΄μ κ³΅κ° μμ± */ } ```
μ΄ CSS μ½λλ μ¬λΌμ΄λκ° ν¬μ»€μ€λ₯Ό λ°μ λ νλμ μΈκ³½μ μ μΆκ°ν©λλ€. outline-offset
μμ±μ μΈκ³½μ κ³Ό μ¬λΌμ΄λ μ¬μ΄μ μ½κ°μ 곡κ°μ λ§λ€μ΄ νμμλ₯Ό μκ°μ μΌλ‘ λ λλ ·νκ² λ§λλλ€. μλ ₯μ΄ μ νλ μ¬μ©μλ₯Ό μν΄ ν¬μ»€μ€ νμμ(μμ, λκ», μ€νμΌ)λ₯Ό μ¬μ©μ μ§μ ν μ μλ μ΅μ
μ μ 곡νλ©΄ μ¬μ©μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
5. μμ λλΉ: μκ° μ₯μ μ¬μ©μλ₯Ό μν κ°μμ± λ³΄μ₯νκΈ°
μμ λλΉλ νΉν μ μλ ₯μ΄λ μλ§Ήμ΄ μλ μ¬μ©μμκ² μ€μν μ κ·Όμ± κ³ λ € μ¬νμ λλ€. νΈλ, νΈλ€(thumb), κ·Έλ¦¬κ³ λͺ¨λ λ μ΄λΈμ΄λ μ§μΉ¨μ ν¬ν¨ν μ¬λΌμ΄λμ μκ°μ μμλ λ°°κ²½μκ³Ό μΆ©λΆν λλΉλ₯Ό κ°μ ΈμΌ ν©λλ€.
μμ λλΉμ λν WCAG μꡬμ¬ν:
- ν μ€νΈ λ° ν μ€νΈ μ΄λ―Έμ§: λ°°κ²½μ λν΄ μ΅μ 4.5:1μ λͺ μλΉλ₯Ό κ°μ ΈμΌ ν©λλ€.
- ν° ν μ€νΈ (18pt λλ 14pt κ΅΅κ²): λ°°κ²½μ λν΄ μ΅μ 3:1μ λͺ μλΉλ₯Ό κ°μ ΈμΌ ν©λλ€.
- λΉν μ€νΈ μ½ν μΈ λλΉ (UI κ΅¬μ± μμ λ° κ·Έλν½ κ°μ²΄): μΈμ ν μμμ λν΄ μ΅μ 3:1μ λͺ μλΉλ₯Ό κ°μ ΈμΌ ν©λλ€. μ΄λ μ¬λΌμ΄λμ νΈλκ³Ό νΈλ€μ μ μ©λ©λλ€.
μμ λλΉ λΆμ λꡬ(μ¨λΌμΈ λ° λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μΌλ‘ μ¬μ© κ°λ₯)λ₯Ό μ¬μ©νμ¬ μ¬λΌμ΄λκ° μ΄λ¬ν λλΉ μꡬμ¬νμ μΆ©μ‘±νλμ§ νμΈνμΈμ. λ€λ₯Έ λ¬ΈνκΆμμλ μμμ λν μ°μμ΄ λ€λ₯Ό μ μμμ κΈ°μ΅νμΈμ. μ 보λ₯Ό μ λ¬νλ μ μΌν μλ¨μΌλ‘ μμμ μ¬μ©νλ κ²μ νΌνμΈμ(μ: ν μ€νΈλ μμ΄μ½ μμ΄ μ€λ₯ μνλ₯Ό λνλ΄κΈ° μν΄ λΉ¨κ°μμ μ¬μ©νλ κ²). μμμ ꡬλ³ν μ μλ μ¬μ©μλ₯Ό μν΄ μμ΄μ½μ΄λ ν¨ν΄κ³Ό κ°μ λ체 μκ°μ μ νΈλ₯Ό μ 곡νλ κ²μ΄ νμμ μ λλ€.
6. λͺ νν μκ°μ μ νΈ: μλ―Έ μλ νΌλλ°± μ 곡νκΈ°
μκ°μ μ νΈλ μ¬μ©μμκ² μ¬λΌμ΄λμ μνμ κ°μ λν μλ―Έ μλ νΌλλ°±μ μ 곡νλ λ° νμμ μ λλ€. μ΄λ¬ν μ νΈλ λͺ ννκ³ μ§κ΄μ μ΄λ©° λ€λ₯Έ λΈλΌμ°μ μ μ₯μΉμμ μΌκ΄λμ΄μΌ ν©λλ€.
μ€μν μκ°μ μ νΈ:
- νΈλ€(Thumb) μμΉ: νΈλ€μ μμΉλ μ¬λΌμ΄λμ νμ¬ κ°μ λͺ ννκ² λνλ΄μΌ ν©λλ€.
- νΈλ μ±μ°κΈ°: νΈλ€μ νμͺ½ νΈλμ μ±μ°λ©΄ μ νν κ°μ μ§ν μν©μ΄λ ν¬κΈ°λ₯Ό μκ°μ μΌλ‘ λνλΌ μ μμ΅λλ€.
- λ μ΄λΈ λ° ν΄ν: μ¬λΌμ΄λμ λͺ©μ μ λͺ ννκ² λνλ΄λ λ μ΄λΈμ μ 곡νκ³ , μ νμ μΌλ‘ μ¬μ©μκ° μ¬λΌμ΄λμ μνΈ μμ©ν λ νμ¬ κ°μ 보μ¬μ£Όλ ν΄νμ νμν©λλ€.
- μνΈμμ©μ λν μκ°μ νΌλλ°±: μ¬μ©μκ° νΈλ€μ λλκ·Ένκ±°λ ν€λ₯Ό λλ₯΄λ λ± μ¬λΌμ΄λμ μνΈ μμ©ν λ μκ°μ νΌλλ°±(μ: μμμ΄λ ν¬κΈ° λ³κ²½)μ μ 곡ν©λλ€.
μΈμ§ μ₯μ κ° μλ μ¬μ©μλ₯Ό κ³ λ €νμ¬ μ£Όμλ₯Ό μ°λ§νκ² νκ±°λ νΌλμ μ€ μ μλ μ§λμΉκ² 볡μ‘ν μκ°μ λμμΈμ΄λ μ λλ©μ΄μ μ νΌνμΈμ. μκ°μ λμμΈμ λ¨μνκ² μ μ§νκ³ λͺ ννκ³ κ°κ²°ν μ 보λ₯Ό μ 곡νλ λ° μ§μ€νμΈμ.
ν μ€νΈ λ° κ²μ¦
μ κ·Όμ± κΈ°λ₯μ ꡬνν νμλ μ¬λΌμ΄λ 컨νΈλ‘€μ΄ μ§μ μΌλ‘ μ κ·Ό κ°λ₯νμ§ νμΈνκΈ° μν΄ μ² μ ν ν μ€νΈμ κ²μ¦μ΄ μ€μν©λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€:
- μλ ν μ€νΈ: ν€λ³΄λμ λ§μ°μ€λ₯Ό μ¬μ©νμ¬ μ¬λΌμ΄λλ₯Ό ν μ€νΈνμ¬ μλ²½νκ² μλνλμ§, μκ°μ ν¬μ»€μ€ νμμκ° λͺ ννκ² λ³΄μ΄λμ§ νμΈν©λλ€.
- μ€ν¬λ¦° 리λ ν μ€νΈ: μ€ν¬λ¦° 리λ(μ: NVDA, JAWS, VoiceOver)λ₯Ό μ¬μ©νμ¬ μ¬λΌμ΄λλ₯Ό ν μ€νΈνμ¬ ARIA μμ±μ΄ μ¬λ°λ₯΄κ² ꡬνλμλμ§, μ€ν¬λ¦° 리λκ° μ¬λΌμ΄λμ λͺ©μ , μν, κ°μ λν΄ μ ννκ³ μλ―Έ μλ μ 보λ₯Ό μ 곡νλμ§ νμΈν©λλ€.
- μλνλ μ κ·Όμ± ν μ€νΈ: μλνλ μ κ·Όμ± ν μ€νΈ λꡬ(μ: axe DevTools, WAVE)λ₯Ό μ¬μ©νμ¬ μ μ¬μ μΈ μ κ·Όμ± λ¬Έμ λ₯Ό μλ³ν©λλ€. μ΄λ¬ν λꡬλ λλ½λ ARIA μμ±μ΄λ λΆμΆ©λΆν μμ λλΉμ κ°μ μΌλ°μ μΈ μ€λ₯λ₯Ό μ°Ύλ λ° λμμ΄ λ μ μμ΅λλ€.
- μ¬μ©μ ν μ€νΈ: μ₯μ κ° μλ μ¬μ©μλ₯Ό ν μ€νΈ κ³Όμ μ μ°Έμ¬μμΌ μ¬λΌμ΄λμ μ¬μ©μ±κ³Ό μ κ·Όμ±μ λν νΌλλ°±μ λ°μ΅λλ€. μ¬μ©μ ν μ€νΈλ μλνλ ν μ€νΈλ μλ ν μ€νΈμμλ λλ¬λμ§ μμ μ μλ λ¬Έμ λ₯Ό μλ³νλ λ° λ§€μ° μ€μν©λλ€.
μ κ·Όμ± ν μ€νΈλ μ§μμ μΈ κ³Όμ μμ κΈ°μ΅νμΈμ. μΉμ¬μ΄νΈλ μ ν리μΌμ΄μ μ λ³κ²½ν λλ§λ€ μ κΈ°μ μΌλ‘ μ¬λΌμ΄λ 컨νΈλ‘€μ ν μ€νΈνμ¬ μ κ·Όμ±μ΄ μ μ§λλμ§ νμΈνμΈμ.
μ¬μ©μ μ§μ μ¬λΌμ΄λ 컨νΈλ‘€: μ£Όμμ¬ν
<input type="range">
μμκ° μ κ·Όμ±μ μν κ²¬κ³ ν κΈ°λ°μ μ 곡νμ§λ§, λλ‘λ νΉμ λμμΈ μꡬμ¬νμ μΆ©μ‘±μν€κΈ° μν΄ μ¬μ©μ μ§μ μ¬λΌμ΄λ 컨νΈλ‘€μ λ§λ€μ΄μΌ ν μλ μμ΅λλ€. κ·Έλ¬λ μ²μλΆν° μ¬μ©μ μ§μ μ¬λΌμ΄λλ₯Ό λ§λλ κ²μ μ κ·Όμ±μ 보μ₯νλ 볡μ‘μ±μ ν¬κ² μ¦κ°μν΅λλ€. μ¬μ©μ μ§μ μ¬λΌμ΄λλ₯Ό λ§λ€κΈ°λ‘ μ νν κ²½μ°, μλ§¨ν± HTML(μ μ ν ARIA μν μ¬μ©), ν€λ³΄λ νμ, ν¬μ»€μ€ κ΄λ¦¬, μμ λλΉ λ° λͺ
νν μκ°μ μ νΈλ₯Ό ν¬ν¨νμ¬ μ΄ κ°μ΄λμ μ€λͺ
λ λͺ¨λ μ κ·Όμ± μꡬμ¬νμ μ μ€νκ² κ΅¬νν΄μΌ ν©λλ€. μμ ν μλ‘μ΄ μ¬μ©μ μ§μ μ»΄ν¬λνΈλ₯Ό λ§λλ κ²λ³΄λ€ κ°λ₯νλ€λ©΄ κΈ°λ³Έ <input type="range">
μμμ μ€νμΌμ ν₯μμν€λ κ²μ΄ μ’
μ’
λ λ°λμ§ν©λλ€. μ¬μ©μ μ§μ μ¬λΌμ΄λκ° κΌ νμν κ²½μ°, μ²μλΆν° μ κ·Όμ±μ μ°μ μνκ³ μ² μ ν ν
μ€νΈμ κ²μ¦μ μν΄ μΆ©λΆν μκ°κ³Ό μμμ ν λΉνμΈμ.
κ΅μ ν κ³ λ €μ¬ν
μ μΈκ³ μ¬μ©μλ₯Ό μν μ¬λΌμ΄λ 컨νΈλ‘€μ λμμΈν λ λ€μ κ΅μ ν(i18n) μΈ‘λ©΄μ κ³ λ €νμΈμ:
- μΈμ΄: λͺ¨λ λ μ΄λΈ, μ§μΉ¨ λ° μ€λ₯ λ©μμ§κ° μ μ ν μΈμ΄λ‘ λ²μλμλμ§ νμΈν©λλ€. λ²μ κ΄λ¦¬λ₯Ό μν΄ κ²¬κ³ ν κ΅μ ν νλ μμν¬λ₯Ό μ¬μ©νμΈμ.
- μ«μ μμ: μ¬μ©μμ λ‘μΌμΌμ λ§λ μ«μ μμμ μ¬μ©ν©λλ€. μ¬κΈ°μλ μμμ κ΅¬λΆ κΈ°νΈ, μ² λ¨μ κ΅¬λΆ κΈ°νΈ λ° ν΅ν κΈ°νΈκ° ν¬ν¨λ©λλ€.
- λ μ§ λ° μκ° μμ: μ¬λΌμ΄λκ° λ μ§λ μκ°μ μ ννλ λ° μ¬μ©λλ κ²½μ°, μ¬μ©μμ λ‘μΌμΌμ λ§λ λ μ§ λ° μκ° μμμ μ¬μ©ν©λλ€.
- μ½κΈ° λ°©ν₯: μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ(RTL) μΈμ΄λ₯Ό κ³ λ €νμΈμ. μ¬λΌμ΄λμ λ μ΄μμκ³Ό μκ°μ μμκ° RTL μΈμ΄μ λ§κ² μ¬λ°λ₯΄κ² λ―Έλ¬λ§λμλμ§ νμΈν©λλ€. λ μ΄μμ μ‘°μ μ μλμΌλ‘ μ²λ¦¬νκΈ° μν΄ CSS λ
Όλ¦¬μ μμ±(μ:
margin-inline-start
λμmargin-left
)μ μ¬μ©νμΈμ. - λ¬Ένμ κ΄μ΅: μμ, κΈ°νΈ, μμ μ κ΄ν λ¬Ένμ κ΄μ΅μ μΈμ§νμΈμ. μΌλΆ λ¬ΈνκΆμμ λΆμΎνκ±°λ νΌλμ€λ¬μΈ μ μλ κΈ°νΈλ μμ μ¬μ©μ νΌνμΈμ.
κ²°λ‘ : λ ν¬μ©μ μΈ μΉ κ΅¬μΆνκΈ°
μ κ·Όμ± λμ μ¬λΌμ΄λ 컨νΈλ‘€μ λ§λλ κ²μ λ ν¬μ©μ μΈ μΉμ ꡬμΆνλ λ° νμμ μ λλ€. μ΄ κ°μ΄λμ μ€λͺ λ μ§μΉ¨μ λ°λ₯΄λ©΄, λ₯λ ₯μ κ΄κ³μμ΄ λͺ¨λ μ¬λμ΄ μ¬λ¬λΆμ λ²μ μ λ ₯μ μ¬μ©ν μ μλλ‘ λ³΄μ₯ν μ μμ΅λλ€. μ κ·Όμ±μ λ¨μν κΈ°μ μ μΈ μꡬμ¬νμ΄ μλλΌ μ€λ¦¬μ μ¬νμ μ± μμ λ¬Έμ μμ κΈ°μ΅νμΈμ. μ κ·Όμ±μ μ°μ μν¨μΌλ‘μ¨ λͺ¨λ μ¬λμκ² λ λμ μ¬μ©μ κ²½νμ μ 곡νκ³ λ 곡νν λμ§νΈ μΈκ³μ κΈ°μ¬ν μ μμ΅λλ€.
μ΄ μ’ ν© κ°μ΄λλ μ κ·Όμ± λμ μ¬λΌμ΄λ 컨νΈλ‘€μ λ§λ€κΈ° μν μμΈν κΆμ₯ μ¬νμ μ 곡νμ΅λλ€. κΈ°μ΅νμΈμ, κ·μ μ€μλ λ¨μ§ μμμ μΌ λΏμ λλ€. λͺ¨λ μ¬λμ μν΄ μ§κ΄μ μ΄κ³ μ¬μ©μ μΉνμ μΈ κ²½νμ λ§λ€κΈ° μν΄ λ Έλ ₯νμΈμ. ν¬μ©μ λμμΈ κ΄νμ μ±νν¨μΌλ‘μ¨, λ₯λ ₯μ΄λ μμΉμ κ΄κ³μμ΄ λͺ¨λ μ¬λμ΄ μ¬λ¬λΆμ μΉμ¬μ΄νΈμ μ ν리μΌμ΄μ μ μ κ·Όν μ μλλ‘ λ³΄μ₯ν μ μμ΅λλ€. μ κ·Όμ±μ μ°μ μνλ κ²μ μ€λ¦¬μ μΌλ‘ μ± μ μλ μΌμΌ λΏλ§ μλλΌ, μ μ λ λ€μν΄μ§κ³ μνΈ μ°κ²°λ μΈμμμ μ¬λ¬λΆμ λλ¬ λ²μλ₯Ό λνκ³ λΈλλ ννμ κ°νν©λλ€.